/*Linux 系统默认提供三个已经打开的文件，它们的文件指针如下。

stdin（标准输入）：默认来源为键盘，文件指针编号为0。
stdout（标准输出）：默认目的地为显示器，文件指针编号为1。
stderr（标准错误）：默认目的地为显示器，文件指针编号为2。
Linux 系统的文件，不一定是数据文件，也可以是设备文件，即文件代表一个可以读或写的设备。文件指针stdin默认是把键盘看作一个文件，读取这个文件，就能获取用户的键盘输入。同理，stdout和stderr默认是把显示器看作一个文件，将程序的运行结果写入这个文件，用户就能看到运行结果了。它们的区别是，stdout写入的是程序的正常运行结果，stderr写入的是程序的报错信息。

这三个输入和输出渠道，是 Linux 默认提供的，所以分别称为标准输入（stdin）、标准输出（stdout）和标准错误（stderr）。因为它们的实现是一样的，都是文件流，所以合称为“标准流”。

Linux 允许改变这三个文件指针（文件流）指向的文件，这称为重定向（redirection）。

如果标准输入不绑定键盘，而是绑定其他文件，可以在文件名前面加上小于号<，跟在程序名后面。这叫做“输入重定向”（input redirection）。

$ demo < in.dat
上面示例中，demo程序代码里面的stdin，将指向文件in.dat，即从in.dat获取数据。

如果标准输出绑定其他文件，而不是显示器，可以在文件名前加上大于号>，跟在程序名后面。这叫做“输出重定向”（output redirection）。

$ demo > out.dat
上面示例中，demo程序代码里面的stdout，将指向文件out.dat，即向out.dat写入数据。

输出重定向>会先擦去out.dat的所有原有的内容，然后再写入。如果希望写入的信息追加在out.dat的结尾，可以使用>>符号。

$ demo >> out.dat
上面示例中，demo程序代码里面的stdout，将向文件out.dat写入数据。与>不同的是，写入的开始位置是out.dat的文件结尾。

标准错误的重定向符号是2>。其中的2代表文件指针的编号，即2>表示将2号文件指针的写入，重定向到err.txt。2号文件指针就是标准错误stderr。

$ demo > out.dat 2> err.txt
上面示例中，demo程序代码里面的stderr，会向文件err.txt写入报错信息。而stdout向文件out.dat写入。

输入重定向和输出重定向，也可以结合在一条命令里面。

$ demo < in.dat > out.dat

// or
$ demo > out.dat < in.dat
重定向还有另一种情况，就是将一个程序的标准输出stdout，指向另一个程序的标准输入stdin，这时要使用|符号。

$ random | sum
上面示例中，random程序代码里面的stdout的写入，会从sum程序代码里面的stdin被读取。
*/